home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Dev / misc / LOCCounter.lha / LOCCounter / src / ArgParser.cpp next >
C/C++ Source or Header  |  2004-08-17  |  2KB  |  90 lines

  1. /****************************************************************************
  2. *
  3. * $RCSfile: ArgParser.cpp $
  4. * $Revision: 2.6 $
  5. * $Date: 2004/08/17 21:53:22 $
  6. * $Author: ssolie $
  7. *
  8. *****************************************************************************
  9. *
  10. * Copyright (c) 2004 Steven Solie.  All Rights Reserved.
  11. *
  12. *****************************************************************************
  13. *
  14. * Argument parser
  15. */
  16. #include "ArgParser.h"
  17.  
  18. #include <dos/rdargs.h>
  19. #include <proto/dos.h>
  20.  
  21.  
  22. ArgParser::ArgParser() :
  23.     m_args(0),
  24.     m_dos_template(0),
  25.     m_strings(0)
  26. {
  27.     for ( uint32 i = 0; i < MAX_TEMPLATE_ITEMS; ++i )  {
  28.         m_results[i] = 0;
  29.     }
  30. }
  31.  
  32.  
  33. ArgParser::~ArgParser()
  34. {
  35.     IDOS->FreeArgs(m_args);
  36. }
  37.  
  38.  
  39. bool ArgParser::parse(const char* dos_template)
  40. {
  41.     m_args = reinterpret_cast<RDArgs*>(
  42.         IDOS->ReadArgs(const_cast<STRPTR>(dos_template), m_results, 0));
  43.     if ( m_args == 0 )  {
  44.         return false;
  45.     }
  46.     else  {
  47.         m_dos_template = dos_template;
  48.         return true;
  49.     }
  50. }
  51.  
  52.  
  53. bool ArgParser::getBoolean(const char* arg, bool def)
  54. {
  55.     bool value = def;
  56.  
  57.     int32 i = IDOS->FindArg(const_cast<STRPTR>(m_dos_template),
  58.         const_cast<STRPTR>(arg));
  59.     if ( i >= 0 && m_results[i] != 0 )  {
  60.         value = true;
  61.     }
  62.  
  63.     return value;
  64. }
  65.  
  66.  
  67. char* ArgParser::firstString(const char* arg)
  68. {
  69.     int32 i = IDOS->FindArg(const_cast<STRPTR>(m_dos_template),
  70.         const_cast<STRPTR>(arg));
  71.     if ( i < 0 || m_results[i] == 0 )  {
  72.         return 0;
  73.     }
  74.  
  75.     // Now points to an array of strings.
  76.     m_strings = reinterpret_cast<char**>(m_results[i]);
  77.     char* string = *m_strings;
  78.  
  79.     return string;
  80. }
  81.  
  82.  
  83. char* ArgParser::nextString()
  84. {
  85.     ++m_strings;
  86.     char* string = *m_strings;
  87.  
  88.     return string;
  89. }
  90.